<?php

/**
 * autoCitas actions.
 *
 * @package    Sistema ATENEA
 * @subpackage autoCitas
 * @author     Wilcar Angulo <wilcarjose@hahoo.com>
 * @equipo     Equipo de desarrollo
 * @version    SVN: $Id: actions.class.php 3501 2007-02-18 10:28:17Z fabien $
 */
class citasActions extends autocitasActions

{
  public $dia='';
  

  public function executeIndex()
  {

  	//return $this->forward('citas', 'filters');
    return $this->redirect('citas/filters');
  }

  public function executeFilters()
  {
    $this->processSort();

    $this->processFilters();

    $this->filters = $this->getUser()->getAttributeHolder()->getAll('sf_admin/cita/filters');
  }

  public function executeList()
  {
    $this->processSort();

    $this->processFilters();

    $this->filters = $this->getUser()->getAttributeHolder()->getAll('sf_admin/cita/filters');

     $ampm = strftime('%p',time());
     //$ampm = 'PM';
     $fch = Date('Y-m-d');
     //$fch='2007-08-31';
     
     $idSesion = $this->getUser()->getAttribute('idsesion');
     //print 'gggggg'.$idSesion;exit;
     $this->dia=$this->getRequestParameter('filters[fecha][from]');
     //echo $this->getRequestParameter('filters[fecha][from]');

     $this->setVar('fecha', $this->dia);
     //print $this->dia; exit;
     
     $dia = substr($this->dia,0,2);
     $mes = substr($this->dia,3,2);
     $ano = substr($this->dia,6,4);
     $dia2 = $ano.'-'.$mes.'-'.$dia;
      $this->getUser()->setAttribute('fechaIng',$dia2);
     //$fecselect = 

     if (($fch == $dia2)&&($ampm=='PM')){

     	// pager
    $this->pager2 = new sfPropelPager('Cita', 20);
    $ct = new Criteria();
    // De sebe colocar el id usuario del especialista como parametro para generar el criterio
    $ct->add(CitaPeer::ESPECIALISTA_ID,$idSesion);
    $fch = Date('Y-m-d');
    $ct->add(CitaPeer::FECHA,$fch,Criteria::GREATER_EQUAL);
    $ct->addAscendingOrderByColumn(CitaPeer::BLOQUE_ID);
    $ct->add(CitaPeer::TURNO_ID,2);
    $this->addSortCriteria($ct);
    $this->addFiltersCriteria($ct);
    $this->pager2->setCriteria($ct);
    $this->pager2->setPage($this->getRequestParameter('page', 1));
    $this->pager2->init();



    // pager
    $this->pager3 = new sfPropelPager('Cita', 20);
    $cn = new Criteria();
    // De sebe colocar el id usuario del especialista como parametro para generar el criterio
    $cn->add(CitaPeer::ESPECIALISTA_ID,$idSesion);
    $fch = Date('Y-m-d');
    $cn->add(CitaPeer::FECHA,$fch,Criteria::GREATER_EQUAL);
    $cn->addAscendingOrderByColumn(CitaPeer::BLOQUE_ID);
    $cn->add(CitaPeer::TURNO_ID,3);
    $this->addSortCriteria($cn);
    $this->addFiltersCriteria($cn);
    $this->pager3->setCriteria($cn);
    $this->pager3->setPage($this->getRequestParameter('page', 1));
    $this->pager3->init();

     }
     else{
    
     	if ($fch <= $dia2)
     {
     	

     // pager
    $this->pager1 = new sfPropelPager('Cita', 20);
    $cm = new Criteria();
    // De sebe colocar el id usuario del especialista como parametro para generar el criterio
    $cm->add(CitaPeer::ESPECIALISTA_ID,$idSesion);
    
    $cm->add(CitaPeer::FECHA,$fch,Criteria::GREATER_EQUAL);
    $cm->addAscendingOrderByColumn(CitaPeer::BLOQUE_ID);
    $cm->add(CitaPeer::TURNO_ID,1);
    $this->addSortCriteria($cm);
    $this->addFiltersCriteria($cm);
    $this->pager1->setCriteria($cm);
    $this->pager1->setPage($this->getRequestParameter('page', 1));
    $this->pager1->init();
    

  
    // pager
    $this->pager2 = new sfPropelPager('Cita', 20);
    $ct = new Criteria();
    // De sebe colocar el id usuario del especialista como parametro para generar el criterio
    $ct->add(CitaPeer::ESPECIALISTA_ID,$idSesion);
    $fch = Date('Y-m-d');
    $ct->add(CitaPeer::FECHA,$fch,Criteria::GREATER_EQUAL);
    $ct->addAscendingOrderByColumn(CitaPeer::BLOQUE_ID);
    $ct->add(CitaPeer::TURNO_ID,2);
    $this->addSortCriteria($ct);
    $this->addFiltersCriteria($ct);
    $this->pager2->setCriteria($ct);
    $this->pager2->setPage($this->getRequestParameter('page', 1));
    $this->pager2->init();



    // pager
    $this->pager3 = new sfPropelPager('Cita', 20);
    $cn = new Criteria();
    // De sebe colocar el id usuario del especialista como parametro para generar el criterio
    $cn->add(CitaPeer::ESPECIALISTA_ID,$idSesion);
    $fch = Date('Y-m-d');
    $cn->add(CitaPeer::FECHA,$fch,Criteria::GREATER_EQUAL);
    $cn->addAscendingOrderByColumn(CitaPeer::BLOQUE_ID);
    $cn->add(CitaPeer::TURNO_ID,3);
    $this->addSortCriteria($cn);
    $this->addFiltersCriteria($cn);
    $this->pager3->setCriteria($cn);
    $this->pager3->setPage($this->getRequestParameter('page', 1));
    $this->pager3->init(); 

     	}
     }
  }

  public function executeCreate()
  {
    return $this->forward('citas', 'edit');
  }

  public function executeSave()
  {
    return $this->forward('citas', 'edit');
  }

  public function executeEdit()
  {
    $this->cita = $this->getCitaOrCreate();

    if ($this->getRequest()->getMethod() == sfRequest::POST)
    {
      $this->updateCitaFromRequest();

      $this->saveCita($this->cita);

      $this->setFlash('notice', 'Your modifications have been saved');

      if ($this->getRequestParameter('save_and_add'))
      {
        return $this->redirect('citas/create');
      }
      else if ($this->getRequestParameter('save_and_list'))
      {
        return $this->redirect('citas/list');
      }
      else
      {
        return $this->redirect('citas/edit?id='.$this->cita->getId());
      }
    }
    else
    {
      $this->labels = $this->getLabels();
    }
  }

  public function executeDelete()
  {
    $this->cita = CitaPeer::retrieveByPk($this->getRequestParameter('id'));
    $this->forward404Unless($this->cita);

    try
    {
      $this->deleteCita($this->cita);
    }
    catch (PropelException $e)
    {
      $this->getRequest()->setError('delete', 'Could not delete the selected Cita. Make sure it does not have any associated items.');
      return $this->forward('citas', 'list');
    }

    return $this->redirect('citas/list');
  }

  public function handleErrorEdit()
  {
    $this->preExecute();
    $this->cita = $this->getCitaOrCreate();
    $this->updateCitaFromRequest();

    $this->labels = $this->getLabels();

    return sfView::SUCCESS;
  }

  protected function saveCita($cita)
  {
    $cita->save();

  }

  protected function deleteCita($cita)
  {
    $cita->delete();
  }

  protected function updateCitaFromRequest()
  {
    $cita = $this->getRequestParameter('cita');

    if (isset($cita['fecha']))
    {
      if ($cita['fecha'])
      {
        try
        {
          $dateFormat = new sfDateFormat($this->getUser()->getCulture());
                              if (!is_array($cita['fecha']))
          {
            $value = $dateFormat->format($cita['fecha'], 'i', $dateFormat->getInputPattern('d'));
          }
          else
          {
            $value_array = $cita['fecha'];
            $value = $value_array['year'].'-'.$value_array['month'].'-'.$value_array['day'].(isset($value_array['hour']) ? ' '.$value_array['hour'].':'.$value_array['minute'].(isset($value_array['second']) ? ':'.$value_array['second'] : '') : '');
          }
          $this->cita->setFecha($value);
        }
        catch (sfException $e)
        {
          // not a date
        }
      }
      else
      {
        $this->cita->setFecha(null);
      }
    }
    if (isset($cita['turno_id']))
    {
    $this->cita->setTurnoId($cita['turno_id'] ? $cita['turno_id'] : null);
    }
    if (isset($cita['especialista_id']))
    {
    $this->cita->setEspecialistaId($cita['especialista_id'] ? $cita['especialista_id'] : null);
    }
    if (isset($cita['solicitante_id']))
    {
    $this->cita->setSolicitanteId($cita['solicitante_id'] ? $cita['solicitante_id'] : null);
    }
    if (isset($cita['tipo_cita']))
    {
      $this->cita->setTipoCita($cita['tipo_cita']);
    }
    if (isset($cita['motivo']))
    {
      $this->cita->setMotivo($cita['motivo']);
    }
    if (isset($cita['bloque_id']))
    {
    $this->cita->setBloqueId($cita['bloque_id'] ? $cita['bloque_id'] : null);
    }
  }

  protected function getCitaOrCreate($id = 'id')
  {
    if (!$this->getRequestParameter($id))
    {
      $cita = new Cita();
    }
    else
    {
      $cita = CitaPeer::retrieveByPk($this->getRequestParameter($id));

      $this->forward404Unless($cita);
    }

    return $cita;
  }

  protected function processFilters()
  {

    if ($this->getRequest()->hasParameter('filter'))
    {
      $filters = $this->getRequestParameter('filters');
      $filters['fecha']['to']=$filters['fecha']['from'];
      $this->dia=$filters['fecha']['from'];
      if (isset($filters['fecha']['from']) && $filters['fecha']['from'] !== '')
      {
        $filters['fecha']['from'] = sfI18N::getTimestampForCulture($filters['fecha']['from'], $this->getUser()->getCulture());
      }
      if (isset($filters['fecha']['to']) && $filters['fecha']['to'] !== '')
      {
        $filters['fecha']['to'] = sfI18N::getTimestampForCulture($filters['fecha']['to'], $this->getUser()->getCulture());
      }

      $this->getUser()->getAttributeHolder()->removeNamespace('sf_admin/cita/filters');
      $this->getUser()->getAttributeHolder()->add($filters, 'sf_admin/cita/filters');

    }
  }

  protected function processSort()
  {
    if ($this->getRequestParameter('sort'))
    {
      $this->getUser()->setAttribute('sort', $this->getRequestParameter('sort'), 'sf_admin/cita/sort');
      $this->getUser()->setAttribute('type', $this->getRequestParameter('type', 'asc'), 'sf_admin/cita/sort');
    }

    if (!$this->getUser()->getAttribute('sort', null, 'sf_admin/cita/sort'))
    {
    }
  }

  protected function addFiltersCriteria($c)
  {
  	 $filters['especialista_id']= 1;
  	    if (isset($this->filters['especialista_id_is_empty']))
    {
      $criterion = $c->getNewCriterion(CitaPeer::ESPECIALISTA_ID, '');
      $criterion->addOr($c->getNewCriterion(CitaPeer::ESPECIALISTA_ID, null, Criteria::ISNULL));
      $c->add($criterion);
    }
    else if (isset($this->filters['especialista_id']) && $this->filters['especialista_id'] !== '')
    {
      $c->add(CitaPeer::ESPECIALISTA_ID, $this->filters['especialista_id']);
    }
    if (isset($this->filters['fecha_is_empty']))
    {
      $criterion = $c->getNewCriterion(CitaPeer::FECHA, '');
      $criterion->addOr($c->getNewCriterion(CitaPeer::FECHA, null, Criteria::ISNULL));
      $c->add($criterion);
    }
    else if (isset($this->filters['fecha']))
    {
      if (isset($this->filters['fecha']['from']) && $this->filters['fecha']['from'] !== '')
      {
        $criterion = $c->getNewCriterion(CitaPeer::FECHA, date('Y-m-d', $this->filters['fecha']['from']), Criteria::GREATER_EQUAL);
      }
      if (isset($this->filters['fecha']['to']) && $this->filters['fecha']['to'] !== '')
      {
        if (isset($criterion))
        {
          $criterion->addAnd($c->getNewCriterion(CitaPeer::FECHA, date('Y-m-d', $this->filters['fecha']['to']), Criteria::LESS_EQUAL));
        }
        else
        {
          $criterion = $c->getNewCriterion(CitaPeer::FECHA, date('Y-m-d', $this->filters['fecha']['to']), Criteria::LESS_EQUAL);
        }
      }

      if (isset($criterion))
      {
        $c->add($criterion);
      }
    }
  }

  protected function addSortCriteria($c)
  {
    if ($sort_column = $this->getUser()->getAttribute('sort', null, 'sf_admin/cita/sort'))
    {
      $sort_column = CitaPeer::translateFieldName($sort_column, BasePeer::TYPE_FIELDNAME, BasePeer::TYPE_COLNAME);
      if ($this->getUser()->getAttribute('type', null, 'sf_admin/cita/sort') == 'asc')
      {
        $c->addAscendingOrderByColumn($sort_column);
      }
      else
      {
        $c->addDescendingOrderByColumn($sort_column);
      }
    }
  }

  protected function getLabels()
  {
    return array(
      'cita{id}' => 'Id:',
      'cita{fecha}' => 'Fecha:',
      'cita{turno_id}' => 'Turno:',
      'cita{especialista_id}' => 'Especialista:',
      'cita{solicitante_id}' => 'Solicitante:',
      'cita{tipo_cita}' => 'Tipo cita:',
      'cita{motivo}' => 'Motivo:',
      'cita{bloque_id}' => 'Bloque:',
    );
  }
}
